package util;

import java.util.Collection;
import java.util.Comparator;
import java.util.Iterator;

/**
 * 模仿Collections 写的集合工具类
 * 练习泛型类型边界
 * @Author Antony
 * @Since 2018/6/23 15:21
 */
public class CollUtil {

    /**
     * 找到集合中最大元素，需要元素是Object的子类，并且实现了Comparable接口
     * @param collection
     * @param <E>
     * @return
     */
    public static <E extends Object & Comparable<? super E>> E findMax(Collection<? extends  E> collection){
        Iterator<? extends E> itr = collection.iterator();
        E maxItem = itr.next();
        while(itr.hasNext()){
            E curr = itr.next();
            maxItem = maxItem.compareTo(curr) > 0 ? maxItem : curr;
        }

        return maxItem;
    }

    /**
     * 不需要元素显示的实现 Comparable
     * 而通过传递一个比较的行为，来实现元素间比较，进而可以找出结果
     * @param collection
     * @param comparator
     * @param <E>
     * @return
     */
    public static <E> E findMax(Collection<? extends E> collection, Comparator<? super E> comparator){
        Iterator<? extends  E> itr = collection.iterator();
        E maxItem = itr.next();
        while(itr.hasNext()){
            E item = itr.next();
            maxItem = comparator.compare(item, maxItem) > 0 ? item : maxItem;
        }

        return maxItem;
    }
}
